home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1035 / 1035.xpi / chrome / 1clickweather.jar / content / 1clickweather / js / obs.js < prev    next >
Text File  |  2008-10-05  |  8KB  |  245 lines

  1. // handle the obs data
  2.  
  3. function oObs(){
  4.    var Data = {};
  5.    var xmlRequest = null;
  6.  
  7.    this.init = function(id, url){
  8.       this.id = id;    // id of the object to associate with the xul interface
  9.       this.url = url;    // where we get the data from
  10.       DumperTagProperties["OPTION"] = ['text','value','defaultSelected'];
  11.    }
  12.  
  13.        // Update() is called periodically to update the data in the object
  14.     this.Update = function(){
  15.         
  16.         /* track */
  17.         
  18.         //alert("Update");
  19.           if(this.url){
  20.             if(!xmlRequest){
  21.                 xmlRequest = new XMLRequest(this.url);
  22.                 xmlRequest.setParser(this);
  23.              }
  24.             //alert("Update get");
  25.              xmlRequest.Get();
  26.           }else{
  27.             alert("Update no url");
  28.             DumperAlert(this);
  29.           }
  30.        }
  31.  
  32.    // if there is an error from the XMLRequestNonBlocking call, call this method
  33.    this.parseError = function(errCode){
  34.       alert("this.ParseError()");
  35.    }
  36.  
  37.    this.Dump = function(){
  38.       DumperAlert(this);
  39.    }
  40.  
  41.    this.setTooltip = function(){
  42.            alert("setTooltip is called");
  43.       // first, we make a tooltip object
  44.       var _tooltip = document.createElement("tooltip");
  45.       _tooltip.setAttribute("id", this.id + "Tooltip"); // and give it an id
  46.  
  47.       var ttOuterVbox = document.createElement("vbox");
  48.       _tooltip.appendChild(ttOuterVbox);
  49.  
  50.       // now we make a pair of hboxs
  51.       var ttTopHbox = document.createElement("hbox");
  52.       ttOuterVbox.appendChild(ttTopHbox);
  53.       var ttBottomHbox = document.createElement("hbox");
  54.       ttOuterVbox.appendChild(ttBottomHbox);
  55.  
  56.       // now we make a pair of vboxs
  57.       var ttTImageVbox = document.createElement("vbox");
  58.       ttTopHbox.appendChild(ttTImageVbox);
  59.       var ttTTextVbox = document.createElement("vbox");
  60.       ttTopHbox.appendChild(ttTTextVbox);
  61.  
  62.       // the image goes in the first vbox
  63.       var ttimg = document.createElement("image");
  64.       ttimg.setAttribute("src", "chrome://1clickweather/skin/icons/wx/64x64/" + Data['icon'] + ".png");
  65.       ttimg.setAttribute("width", "64");
  66.       ttimg.setAttribute("height", "64");
  67.       ttTImageVbox.appendChild(ttimg);
  68.   
  69.       // the labels for text data go in the second vbox
  70.       var ttl = document.createElement("label");
  71.       ttl.setAttribute("value", "As of: " + Data['lsup']);
  72.       ttl.setAttribute("class", "header");
  73.       ttTTextVbox.appendChild(ttl);
  74.  
  75.       var ttl = document.createElement("label");
  76.       ttl.setAttribute("value", "req time: " + Data['tm']);
  77.       ttl.setAttribute("class", "header");
  78.       ttTTextVbox.appendChild(ttl);
  79.  
  80.       var ttl = document.createElement("label");
  81.       ttl.setAttribute("value", "in " + Data['dnam']);
  82.       ttTTextVbox.appendChild(ttl);
  83.  
  84.       var ttl = document.createElement("label");
  85.       ttl.setAttribute("value", "");
  86.       ttTTextVbox.appendChild(ttl);
  87.  
  88.       var ttl = document.createElement("label");
  89.       ttl.setAttribute("value", Data['t']);
  90.       ttTTextVbox.appendChild(ttl);
  91.  
  92.       var ttl = document.createElement("label");
  93.       ttl.setAttribute("value", "Temperature: " + Data['tmp'] + " F");
  94.       ttTTextVbox.appendChild(ttl);
  95.  
  96.       var ttl = document.createElement("label");
  97.       ttl.setAttribute("value", "Dew Point: " + Data['dewp'] + " F");
  98.       ttTTextVbox.appendChild(ttl);
  99.  
  100.       var ttl = document.createElement("label");
  101.       ttl.setAttribute("value", "Humidity: " + Data['hmid'] + "%");
  102.       ttTTextVbox.appendChild(ttl);
  103.  
  104.       var ttl = document.createElement("label");
  105.       ttl.setAttribute("value", "Visibility: " + Data['vis'] + " mi");
  106.       ttTTextVbox.appendChild(ttl);
  107.  
  108.       var ttl = document.createElement("label");
  109.       ttl.setAttribute("value", "Pressure: " + Data['bar.r'] + " in and " + Data['bar.d']);
  110.       ttTTextVbox.appendChild(ttl);
  111.  
  112.       var ttl = document.createElement("label");
  113.       ttl.setAttribute("value", "Wind out of the " + Data['wind.t'] + " at " + Data['wind.s'] + " mph");
  114.       ttTTextVbox.appendChild(ttl);
  115.  
  116.       var ttl = document.createElement("label");
  117.       ttl.setAttribute("value", "");
  118.       ttTTextVbox.appendChild(ttl);
  119.  
  120.       // now we make a pair of vboxs
  121.       var ttBImageVbox = document.createElement("vbox");
  122.       ttBottomHbox.appendChild(ttBImageVbox);
  123.       var ttBTextVbox = document.createElement("vbox");
  124.       ttBottomHbox.appendChild(ttBTextVbox);
  125.  
  126.       // the image goes in the first vbox
  127.       var ttimg = document.createElement("image");
  128.       ttimg.setAttribute("src", "chrome://1clickweather/skin/icons/wx/64x64/" + Data['moon.icon'] +".png");
  129.       ttimg.setAttribute("width", "64");
  130.       ttimg.setAttribute("height", "64");
  131.       ttBImageVbox.appendChild(ttimg);
  132.   
  133.  
  134.       // the labels for text data go in the second vbox
  135.       var ttl = document.createElement("label");
  136.       ttl.setAttribute("value", "Tonight:");
  137.       ttl.setAttribute("class", "header");
  138.       ttBTextVbox.appendChild(ttl);
  139.  
  140.       var ttl = document.createElement("label");
  141.       ttl.setAttribute("value", "Sunset: " + Data['suns']);
  142.       ttBTextVbox.appendChild(ttl);
  143.  
  144.       var ttl = document.createElement("label");
  145.       ttl.setAttribute("value", "Moon Phase: " + Data['moon.t']);
  146.       ttBTextVbox.appendChild(ttl);
  147.  
  148.  
  149.       _tooltip.setAttribute("noautohide", false);
  150.       _tooltip.setAttribute("position", "before_start");
  151.       _tooltip.position = "overlap";
  152.       try{
  153.          document.getElementById("statusbar-currentconditions").removeChild(document.getElementById(this.id + "Tooltip"));
  154.       }
  155.       catch(e){
  156.       }
  157.       document.getElementById("statusbar-currentconditions").appendChild(_tooltip);
  158.  
  159.     alert("done with tooltip");
  160.    }
  161.  
  162.    // parse an xml doc into our obs object
  163.    this.parseFunc = function(xmlDoc){
  164.       Data = {}; // flush the Data hash
  165.  
  166. //alert("parser");
  167.       // first, we need to get the sunset since it's not in the cc node
  168.       try{
  169.          var xml_dnam = xmlDoc.getElementsByTagName('dnam')[0].firstChild.nodeValue;
  170.          if(xml_dnam){
  171.             Data['dnam'] = xml_dnam;
  172.          }
  173.       }
  174.       catch(e){
  175.          alert('dnam alert: ' + e.message);
  176.       }
  177.  
  178.       // first, we need to get the sunset since it's not in the cc node
  179.       try{
  180.          var xml_suns = xmlDoc.getElementsByTagName('suns')[0].firstChild.nodeValue;
  181.          if(xml_suns){
  182.             Data['suns'] = xml_suns;
  183.          }
  184.       }
  185.       catch(e){
  186.          alert('suns alert: ' + e.message);
  187.       }
  188.  
  189.       // first, we need to get the sunset since it's not in the cc node
  190.       try{
  191.          var xml_tm = xmlDoc.getElementsByTagName('tm')[0].firstChild.nodeValue;
  192.          if(xml_tm){
  193.             Data['tm'] = xml_tm;
  194.          }
  195.       }
  196.       catch(e){
  197.          alert('tm alert: ' + e.message);
  198.       }
  199.  
  200.       // now we move on to the current conditions
  201.       var cc = xmlDoc.getElementsByTagName("cc")[0].childNodes;
  202.       var x = 0;
  203.  
  204.       // loop through all the children under the cc node
  205.       for(x = 0; x < cc.length; x++){
  206.          try{
  207.             // if the nodes we find only have a value and no children, make them into variables
  208.             if((cc[x].childNodes.length == 1) && (typeof(cc[x].firstChild.nodeValue) == "string")){
  209.                Data[cc[x].nodeName] = cc[x].firstChild.nodeValue;
  210.             }else if(cc[x].childNodes.length > 1){
  211.                // if the child has more than one node under it, we deal with it a bit differently.
  212.                // we assume there will only be one more level below the current children so
  213.                // now we will make keys in Data[] names after the topchild.bottomchild like 'bar.r'
  214.  
  215.                var child = cc[x].childNodes;
  216.                var y = 0;
  217.                for(y = 0; y < child.length; y++){
  218.                   // if this is not a valid node name, skip it
  219.                   if(child[y].nodeName == "#text"){
  220.                      continue;
  221.                   }
  222.  
  223.                   // otherwise, make a new entry in Data for it
  224.                   if(typeof(child[y].firstChild.nodeValue) == "string"){
  225.                      Data[cc[x].nodeName + "." + child[y].nodeName] = child[y].firstChild.nodeValue;
  226.                   }
  227.                }
  228.             }
  229.          }
  230.          catch(e){
  231.           //  alert(e.message);
  232.          }
  233.  
  234.       }
  235. //alert("done parsing");
  236. //DumperAlert(Data);
  237.       this.setTooltip();
  238.    }
  239.  
  240. }
  241.  
  242.  
  243.  
  244.  
  245.